export default {
    //为当前模块开启命名空间
    namespaced:true,
    state:()=>({
        //{goods_id,goods_name,goods_price,goods_count,goods_small_logo,goods_state}
       cart: JSON.parse(uni.getStorageSync('cart') || '[]')
    }),
    mutations:{
       addToCart(state, goods) {
             const findResult = state.cart.find(x => x.goods_id === goods.goods_id)   
             if (!findResult) {
               state.cart.push(goods)
             } else {
               findResult.goods_count++
             }  
             this.commit('m_cart/saveToStorage')
           },
        // 将购物车中的数据持久化存储到本地
        saveToStorage(state) {
           uni.setStorageSync('cart', JSON.stringify(state.cart))
        },
        updateGoodsState(state,goods){
            const findResult = state.cart.find(x=>x.goods_id === goods.goods_id)
            if(findResult){
                findResult.goods_state = goods.goods_state
                this.commit('m_cart/saveToStorage')
            }
        },
        // 更新购物车中商品的数量
        updateGoodsCount(state, goods) {
          // 根据 goods_id 查询购物车中对应商品的信息对象
          const findResult = state.cart.find(x => x.goods_id === goods.goods_id)
        
          if(findResult) {
            // 更新对应商品的数量
            findResult.goods_count = goods.goods_count
            // 持久化存储到本地
            this.commit('m_cart/saveToStorage')
          }
        },
        //根据id从购物车中删除对应的商品信息
        removeGoodsById(state,goods_id){
            state.cart = state.cart.filter(x=>x.goods_id!==goods_id)
            this.commit('m_cart/saveToStorage')
        },
       // 勾选的商品的总数量
       checkedCount(state) {
         // 先使用 filter 方法，从购物车中过滤器已勾选的商品
         // 再使用 reduce 方法，将已勾选的商品总数量进行累加
         // reduce() 的返回值就是已勾选的商品的总数量
         return state.cart.filter(x => x.goods_state).reduce((total, item) => total += item.goods_count, 0)
       },
       updateAllGoodsState(state,newState){
           state.cart.forEach(x=>x.goods_state = newState)
           this.commit('m_cart/saveToStorage')
       }
    },
    getters:{
        total(state){
            let c = 0;
            state.cart.forEach(item=> c += item.goods_count)
            return c
        }
    },
}